/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * OknoGlowne.java
 *
 * Created on 2011-04-02, 16:49:53
 */
package medimg.widok;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import medimg.model.NieedytowalnyModelTabeli;
import medimg.scheme.Badania;
import medimg.scheme.Pacjenci;
import medimg.scheme.Personel;
import medimg.scheme.RodzajBadan;
import medimg.scheme.Zdjecia;
import medimg.widok.badania.*;
import medimg.widok.konto.*;
import medimg.widok.pacjenci.*;
import medimg.widok.personel.*;
import medimg.widok.pomoc.*;
import medimg.widok.raporty.*;
import org.hibernate.JDBCException;
import org.hibernate.Session;

/**
 *
 * @author PSI
 */
public class OknoGlowne extends JFrame {

    private NieedytowalnyModelTabeli modelTabeli;
    private NieedytowalnyModelTabeli modelGlowny;
    private ArrayList<Badania> listaBadan;
    private ArrayList<Zdjecia> listaZdjec;
    private Pacjenci pacjent;

    /** Creates new form OknoGlowne */
    public OknoGlowne() {
        initComponents();
        this.setVisible(true);
        this.setSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height));
        this.setExtendedState(JFrame.MAXIMIZED_BOTH);
        UIManager.put("FileChooser.saveButtonText", "Zapisz");
        UIManager.put("FileChooser.cancelButtonText", "Anuluj");
        UIManager.put("FileChooser.cancelButtonToolTipText", "Zamknij okno");
        UIManager.put("FileChooser.saveButtonToolTipText", "Zapis pliku");
        UIManager.put("FileChooser.fileNameLabelText", "Nazwa pliku :");
        UIManager.put("FileChooser.filesOfTypeLabelText", "Rodzaj pliku :");
        UIManager.put("FileChooser.saveInLabelText", "Katalogi :");
        UIManager.put("FileChooser.saveDialogTitleText", "Zapisz");
        modelTabeli = new NieedytowalnyModelTabeli();
        modelGlowny = new NieedytowalnyModelTabeli();
        modelGlowny.addColumn("ID");
        modelGlowny.addColumn("DATA");
        modelGlowny.addColumn("PRACOWNIK");
        modelGlowny.addColumn("PACJENT");
        modelGlowny.addColumn("RODZAJ BADANIA");
        modelGlowny.addColumn("DIAGNOZA");
        modelGlowny.addColumn("ZDJĘCIE");
        modelTabeli = modelGlowny;
        jTableGlownaTabela.setModel(modelGlowny);
        jMenuBadania.setVisible(false);
        jMenuPacjenci.setVisible(false);
        jMenuPersonel.setVisible(false);
        jMenuRaporty.setVisible(false);
        SelectionListener listener = new SelectionListener(jTableGlownaTabela);
        jTableGlownaTabela.getSelectionModel().addListSelectionListener(listener);
        jTableGlownaTabela.getColumnModel().getSelectionModel().addListSelectionListener(listener);
        jTableGlownaTabela.getEditorComponent();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanelStatus = new javax.swing.JPanel();
        jProgressBar = new javax.swing.JProgressBar();
        jToolBar1 = new javax.swing.JToolBar();
        jLabelZalogowanyJako = new javax.swing.JLabel();
        jLabelLogin = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTableGlownaTabela = new javax.swing.JTable();
        jMenuBar = new javax.swing.JMenuBar();
        jMenuPlik = new javax.swing.JMenu();
        jMenuItemWyjscie = new javax.swing.JMenuItem();
        jMenuKonto = new javax.swing.JMenu();
        jMenuItemZaloguj = new javax.swing.JMenuItem();
        jMenuItemWyloguj = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        jMenuItemInformacje = new javax.swing.JMenuItem();
        jSeparator2 = new javax.swing.JPopupMenu.Separator();
        jMenuItemZmianaHasla = new javax.swing.JMenuItem();
        jMenuBadania = new javax.swing.JMenu();
        jMenuItemWykonajBadanie = new javax.swing.JMenuItem();
        jMenuItemZalaczZdjecie = new javax.swing.JMenuItem();
        jSeparator3 = new javax.swing.JPopupMenu.Separator();
        jMenuItemDodajBadanie = new javax.swing.JMenuItem();
        jMenuPacjenci = new javax.swing.JMenu();
        jMenuItemZarzadzajPacjentami = new javax.swing.JMenuItem();
        jMenuItemBadaniaPacjentow = new javax.swing.JMenuItem();
        jMenuPersonel = new javax.swing.JMenu();
        jMenuItemZarzadzajPersonelem = new javax.swing.JMenuItem();
        jSeparator4 = new javax.swing.JPopupMenu.Separator();
        jMenuItemDodajFunkcje = new javax.swing.JMenuItem();
        jMenuRaporty = new javax.swing.JMenu();
        jMenuItemNowyRaport = new javax.swing.JMenuItem();
        jMenuPomoc = new javax.swing.JMenu();
        jMenuItemOProgramie = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("MedImg");
        setBounds(new java.awt.Rectangle(0, 0, 0, 0));

        jPanelStatus.setBorder(new javax.swing.border.LineBorder(null, 1, true));

        javax.swing.GroupLayout jPanelStatusLayout = new javax.swing.GroupLayout(jPanelStatus);
        jPanelStatus.setLayout(jPanelStatusLayout);
        jPanelStatusLayout.setHorizontalGroup(
            jPanelStatusLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelStatusLayout.createSequentialGroup()
                .addContainerGap(612, Short.MAX_VALUE)
                .addComponent(jProgressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        jPanelStatusLayout.setVerticalGroup(
            jPanelStatusLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelStatusLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jProgressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        jToolBar1.setFloatable(false);
        jToolBar1.setRollover(true);

        jLabelZalogowanyJako.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabelZalogowanyJako.setText("Zalogowany jako:    ");
        jToolBar1.add(jLabelZalogowanyJako);
        jToolBar1.add(jLabelLogin);

        jTableGlownaTabela.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        jScrollPane1.setViewportView(jTableGlownaTabela);

        jMenuBar.setPreferredSize(new java.awt.Dimension(362, 21));

        jMenuPlik.setMnemonic('P');
        jMenuPlik.setText("Plik");

        jMenuItemWyjscie.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Q, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemWyjscie.setText("Wyjdź");
        jMenuItemWyjscie.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemWyjscieActionPerformed(evt);
            }
        });
        jMenuPlik.add(jMenuItemWyjscie);

        jMenuBar.add(jMenuPlik);

        jMenuKonto.setText("Konto");

        jMenuItemZaloguj.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_L, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemZaloguj.setText("Zaloguj");
        jMenuItemZaloguj.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemZalogujActionPerformed(evt);
            }
        });
        jMenuKonto.add(jMenuItemZaloguj);

        jMenuItemWyloguj.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_L, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemWyloguj.setText("Wyloguj");
        jMenuItemWyloguj.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemWylogujActionPerformed(evt);
            }
        });
        jMenuKonto.add(jMenuItemWyloguj);
        jMenuKonto.add(jSeparator1);

        jMenuItemInformacje.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_I, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemInformacje.setText("Informacje");
        jMenuItemInformacje.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemInformacjeActionPerformed(evt);
            }
        });
        jMenuKonto.add(jMenuItemInformacje);
        jMenuKonto.add(jSeparator2);

        jMenuItemZmianaHasla.setText("Zmiana hasła");
        jMenuItemZmianaHasla.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemZmianaHaslaActionPerformed(evt);
            }
        });
        jMenuKonto.add(jMenuItemZmianaHasla);

        jMenuBar.add(jMenuKonto);

        jMenuBadania.setText("Badania");

        jMenuItemWykonajBadanie.setText("Wykonaj badanie");
        jMenuItemWykonajBadanie.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemWykonajBadanieActionPerformed(evt);
            }
        });
        jMenuBadania.add(jMenuItemWykonajBadanie);

        jMenuItemZalaczZdjecie.setText("Załącz zdjęcie");
        jMenuItemZalaczZdjecie.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemZalaczZdjecieActionPerformed(evt);
            }
        });
        jMenuBadania.add(jMenuItemZalaczZdjecie);
        jMenuBadania.add(jSeparator3);

        jMenuItemDodajBadanie.setText("Dodaj nowe badanie");
        jMenuItemDodajBadanie.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemDodajBadanieActionPerformed(evt);
            }
        });
        jMenuBadania.add(jMenuItemDodajBadanie);

        jMenuBar.add(jMenuBadania);

        jMenuPacjenci.setText("Pacjenci");

        jMenuItemZarzadzajPacjentami.setText("Zarządzaj pacjentami");
        jMenuItemZarzadzajPacjentami.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemZarzadzajPacjentamiActionPerformed(evt);
            }
        });
        jMenuPacjenci.add(jMenuItemZarzadzajPacjentami);

        jMenuItemBadaniaPacjentow.setText("Badania pacjentów");
        jMenuItemBadaniaPacjentow.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemBadaniaPacjentowActionPerformed(evt);
            }
        });
        jMenuPacjenci.add(jMenuItemBadaniaPacjentow);

        jMenuBar.add(jMenuPacjenci);

        jMenuPersonel.setText("Personel");

        jMenuItemZarzadzajPersonelem.setText("Zarządzaj personelem");
        jMenuItemZarzadzajPersonelem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemZarzadzajPersonelemActionPerformed(evt);
            }
        });
        jMenuPersonel.add(jMenuItemZarzadzajPersonelem);
        jMenuPersonel.add(jSeparator4);

        jMenuItemDodajFunkcje.setText("Dodaj nową funkcję");
        jMenuItemDodajFunkcje.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemDodajFunkcjeActionPerformed(evt);
            }
        });
        jMenuPersonel.add(jMenuItemDodajFunkcje);

        jMenuBar.add(jMenuPersonel);

        jMenuRaporty.setText("Raporty");

        jMenuItemNowyRaport.setText("Utwórz nowy raport");
        jMenuItemNowyRaport.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemNowyRaportActionPerformed(evt);
            }
        });
        jMenuRaporty.add(jMenuItemNowyRaport);

        jMenuBar.add(jMenuRaporty);

        jMenuPomoc.setText("Pomoc");

        jMenuItemOProgramie.setText("O programie");
        jMenuItemOProgramie.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemOProgramieActionPerformed(evt);
            }
        });
        jMenuPomoc.add(jMenuItemOProgramie);

        jMenuBar.add(jMenuPomoc);

        setJMenuBar(jMenuBar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanelStatus, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 750, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 320, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanelStatus, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jMenuItemWyjscieActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemWyjscieActionPerformed

        this.dispose();        // TODO add your handling code here:
    }//GEN-LAST:event_jMenuItemWyjscieActionPerformed

    private void jMenuItemZalogujActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemZalogujActionPerformed
        if (!medimg.hibernate.HibernateUtil.isOpen()) {
            EkranLogowania ekranLogowania = new EkranLogowania(this, true);
            ekranLogowania.setVisible(true);
            switch (ekranLogowania.getUprawnieniaZalogowanego()) {
                case 0: //pacjent
                    pokazOpcjePacjent();
                    zarzadzanieModelem();
                    break;
                case 1: //lekarz
                    pokazOpcjeLekarz();
                    break;
                case 2: //technik
                    pokazOpcjeTechnik();
                    break;
                default:
                    pokazOpcjePacjent();
                    break;
            }
            if (medimg.hibernate.HibernateUtil.isOpen()) {
                getjLabelLogin().setText(ekranLogowania.getjTextFieldPesel().getText());
            }
        } else {
            JOptionPane.showConfirmDialog(this, "Jestes juz podlaczony.", "Blad", JOptionPane.DEFAULT_OPTION);
        }

    }//GEN-LAST:event_jMenuItemZalogujActionPerformed

    private void jMenuItemInformacjeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemInformacjeActionPerformed
        if (medimg.hibernate.HibernateUtil.isOpen()) {
            new Informacje(this, true).setVisible(true);
        } else {
            JOptionPane.showConfirmDialog(this, "Najpierw podłącz się do bazy.", "Nie polaczono", JOptionPane.DEFAULT_OPTION);
        }

    }//GEN-LAST:event_jMenuItemInformacjeActionPerformed

    private void jMenuItemZmianaHaslaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemZmianaHaslaActionPerformed
        new ZmianaHasla(this, true).setVisible(true);        // TODO add your handling code here:
    }//GEN-LAST:event_jMenuItemZmianaHaslaActionPerformed

    private void jMenuItemWykonajBadanieActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemWykonajBadanieActionPerformed
        new WykonanieBadania(this, true).setVisible(true);        // TODO add your handling code here:
    }//GEN-LAST:event_jMenuItemWykonajBadanieActionPerformed

    private void jMenuItemDodajBadanieActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemDodajBadanieActionPerformed
        new NoweBadanie(this, true).setVisible(true);        // TODO add your handling code here:
    }//GEN-LAST:event_jMenuItemDodajBadanieActionPerformed

    private void jMenuItemNowyRaportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemNowyRaportActionPerformed
        NowyRaport nowyRaport = new NowyRaport(this, true);
        nowyRaport.setVisible(true);
        jTableGlownaTabela.setModel(nowyRaport.getModelTabeli());
    }//GEN-LAST:event_jMenuItemNowyRaportActionPerformed

    private void jMenuItemZarzadzajPacjentamiActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemZarzadzajPacjentamiActionPerformed
        if (medimg.hibernate.HibernateUtil.isOpen()) {
            ZarzadzaniePacjentami zarzadzaniePacjentami = new ZarzadzaniePacjentami(this, true);
            zarzadzaniePacjentami.setVisible(true);
        } else {
            JOptionPane.showConfirmDialog(this, "Najpierw podłącz się do bazy.", "Nie polaczono", JOptionPane.DEFAULT_OPTION);
        }

    }//GEN-LAST:event_jMenuItemZarzadzajPacjentamiActionPerformed

    private void jMenuItemZalaczZdjecieActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemZalaczZdjecieActionPerformed
        NoweZdjecie noweZdjecie = new NoweZdjecie(this, true);
        noweZdjecie.setVisible(true);
    }//GEN-LAST:event_jMenuItemZalaczZdjecieActionPerformed

    private void jMenuItemBadaniaPacjentowActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemBadaniaPacjentowActionPerformed
        BadaniaPacjentow badaniaPacjentow = new BadaniaPacjentow(this, true);
        badaniaPacjentow.setVisible(true);
    }//GEN-LAST:event_jMenuItemBadaniaPacjentowActionPerformed

    private void jMenuItemZarzadzajPersonelemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemZarzadzajPersonelemActionPerformed
        ZarzadzaniePersonelem zarzadzaniePersonelem = new ZarzadzaniePersonelem(this, true);
        zarzadzaniePersonelem.setVisible(true);
    }//GEN-LAST:event_jMenuItemZarzadzajPersonelemActionPerformed

    private void jMenuItemDodajFunkcjeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemDodajFunkcjeActionPerformed
        NowaFunkcja nowaFunkcja = new NowaFunkcja(this, true);
        nowaFunkcja.setVisible(true);
    }//GEN-LAST:event_jMenuItemDodajFunkcjeActionPerformed

    private void jMenuItemOProgramieActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemOProgramieActionPerformed
        OProgramie oProgramie = new OProgramie(this, true);
        oProgramie.setVisible(true);
    }//GEN-LAST:event_jMenuItemOProgramieActionPerformed

    private void jMenuItemWylogujActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemWylogujActionPerformed
        medimg.hibernate.HibernateUtil.disconnectFromDataBase();
        if (!medimg.hibernate.HibernateUtil.isOpen()) {
            getjLabelLogin().setText(" ");
            jMenuBadania.setVisible(false);
            jMenuPacjenci.setVisible(false);
            jMenuPersonel.setVisible(false);
            jMenuRaporty.setVisible(false);
            modelTabeli = modelGlowny;
        }

    }//GEN-LAST:event_jMenuItemWylogujActionPerformed

    private void inicjujDane() {
        if (!medimg.hibernate.HibernateUtil.isOpen()) {
            JOptionPane.showConfirmDialog(this, "Najpierw podłącz się do bazy.", "Nie polaczono", JOptionPane.DEFAULT_OPTION);
            return;
        }
        pacjent = null;
        listaZdjec = null;
        Session session = medimg.hibernate.HibernateUtil.getSessionFactory().getCurrentSession(); //pobranie obecnej sesji (autostart jesli jej nie ma)
        try {
            session.beginTransaction(); //rozpoczecie transakcji
            pacjent = (Pacjenci) (session.createQuery("from Pacjenci where Pesel = '" + medimg.hibernate.HibernateUtil.getCurrentUser() + "'").uniqueResult());
            listaZdjec = new ArrayList<Zdjecia>(session.createQuery("from Zdjecia").list());
            session.getTransaction().commit();
        } catch (JDBCException ex) {
            session.getTransaction().rollback(); //jesli sie nie udalo to rollback zeby dane byly zgodne
        }
    }

    private void generujModelTabeli() {
        if (!medimg.hibernate.HibernateUtil.isOpen()) {
            JOptionPane.showConfirmDialog(this, "Najpierw podłącz się do bazy.", "Nie polaczono", JOptionPane.DEFAULT_OPTION);
            return;
        }

        modelTabeli = modelGlowny;
        listaBadan = null;
        Session session = medimg.hibernate.HibernateUtil.getSessionFactory().getCurrentSession(); //pobranie obecnej sesji (autostart jesli jej nie ma)
        try {
            session.beginTransaction(); //rozpoczecie transakcji
            listaBadan = new ArrayList<Badania>(session.createQuery("from Badania where Pacjent = '" + pacjent.getId() + "'").list());
            session.getTransaction().commit();
        } catch (JDBCException ex) {
            session.getTransaction().rollback(); //jesli sie nie udalo to rollback zeby dane byly zgodne
        }

        RodzajBadan r = new RodzajBadan();
        Pacjenci p = new Pacjenci();
        Personel l = new Personel();
        Zdjecia z = new Zdjecia();

        if (listaBadan != null && !listaBadan.isEmpty()) {
            for (Badania bad : listaBadan) {
                Session session2 = medimg.hibernate.HibernateUtil.getSessionFactory().getCurrentSession();
                try {
                    session2.beginTransaction(); //rozpoczecie transakcji
                    r = (RodzajBadan) (session2.createQuery("from RodzajBadan where id = '" + bad.getRodzaj() + "'").uniqueResult());
                    p = (Pacjenci) (session2.createQuery("from Pacjenci where id = '" + bad.getPacjent() + "'").uniqueResult());
                    l = (Personel) (session2.createQuery("from Personel where id = '" + bad.getLekarz() + "'").uniqueResult());
                    for (Zdjecia zdj : listaZdjec) {
                        if (zdj.getBadanie() == bad.getId()) {
                            z = (Zdjecia) (session2.createQuery("from Zdjecia where Badanie = '" + bad.getId() + "'").uniqueResult());
                            break;
                        } else {
                            z = new Zdjecia();
                        }
                    }
                    session2.getTransaction().commit();
                } catch (JDBCException ex) {
                    session2.getTransaction().rollback(); //jesli sie nie udalo to rollback zeby dane byly zgodne
                }
                Object[] dane = {bad.getId(), bad.getData(), l.getNazwisko() + " " + l.getImie(), p.getNazwisko() + " " + p.getImie(), r.getNazwa(), bad.getDiagnoza(), z.getNazwaPliku()};
                modelTabeli.addRow(dane);
            }
        } else {
            JOptionPane.showConfirmDialog(this, "Brak badan!", "Brak danych", JOptionPane.DEFAULT_OPTION);
        }
    }

    public void zarzadzanieModelem() {
        inicjujDane();
        generujModelTabeli();
        jTableGlownaTabela.setModel(modelTabeli);
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel jLabelLogin;
    private javax.swing.JLabel jLabelZalogowanyJako;
    private javax.swing.JMenu jMenuBadania;
    private javax.swing.JMenuBar jMenuBar;
    private javax.swing.JMenuItem jMenuItemBadaniaPacjentow;
    private javax.swing.JMenuItem jMenuItemDodajBadanie;
    private javax.swing.JMenuItem jMenuItemDodajFunkcje;
    private javax.swing.JMenuItem jMenuItemInformacje;
    private javax.swing.JMenuItem jMenuItemNowyRaport;
    private javax.swing.JMenuItem jMenuItemOProgramie;
    private javax.swing.JMenuItem jMenuItemWyjscie;
    private javax.swing.JMenuItem jMenuItemWykonajBadanie;
    private javax.swing.JMenuItem jMenuItemWyloguj;
    private javax.swing.JMenuItem jMenuItemZalaczZdjecie;
    private javax.swing.JMenuItem jMenuItemZaloguj;
    private javax.swing.JMenuItem jMenuItemZarzadzajPacjentami;
    private javax.swing.JMenuItem jMenuItemZarzadzajPersonelem;
    private javax.swing.JMenuItem jMenuItemZmianaHasla;
    private javax.swing.JMenu jMenuKonto;
    private javax.swing.JMenu jMenuPacjenci;
    private javax.swing.JMenu jMenuPersonel;
    private javax.swing.JMenu jMenuPlik;
    private javax.swing.JMenu jMenuPomoc;
    private javax.swing.JMenu jMenuRaporty;
    private javax.swing.JPanel jPanelStatus;
    private javax.swing.JProgressBar jProgressBar;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JPopupMenu.Separator jSeparator2;
    private javax.swing.JPopupMenu.Separator jSeparator3;
    private javax.swing.JPopupMenu.Separator jSeparator4;
    private javax.swing.JTable jTableGlownaTabela;
    private javax.swing.JToolBar jToolBar1;
    // End of variables declaration//GEN-END:variables

    /**
     * @return the jLabelLogin
     */
    public javax.swing.JLabel getjLabelLogin() {
        return jLabelLogin;
    }

    /**
     * @param jLabelLogin the jLabelLogin to set
     */
    public void setjLabelLogin(javax.swing.JLabel jLabelLogin) {
        this.jLabelLogin = jLabelLogin;
    }

    public void pokazOpcjePacjent() {
        jTableGlownaTabela.setModel(modelGlowny);
        jMenuBadania.setVisible(false);
        jMenuPacjenci.setVisible(false);
        jMenuPersonel.setVisible(false);
        jMenuRaporty.setVisible(false);
    }

    public void pokazOpcjeTechnik() {
        jTableGlownaTabela.setModel(modelGlowny);
        jMenuBadania.setVisible(true);
        jMenuPacjenci.setVisible(true);
        jMenuPersonel.setVisible(true);
        jMenuRaporty.setVisible(true);
    }

    public void pokazOpcjeLekarz() {
        jTableGlownaTabela.setModel(modelGlowny);
        jMenuBadania.setVisible(true);
        jMenuPacjenci.setVisible(true);
        jMenuPersonel.setVisible(false);
        jMenuRaporty.setVisible(true);
    }

    public class SelectionListener implements ListSelectionListener {

        private JTable table;
        private JFileChooser jFileChooserZdjecie;
        private int wiersz;
        private Zdjecia zdjecie;
        private File plik;
        private byte[] bufor;

        // It is necessary to keep the table since it is not possible
        // to determine the table from the event's source
        SelectionListener(JTable table) {
            this.table = table;
        }

        public void valueChanged(ListSelectionEvent e) {

            jFileChooserZdjecie = new JFileChooser();
            wiersz = table.getSelectedRow();

            if (e.getValueIsAdjusting()) {
                // The mouse button has not yet been released
                if (wiersz != -1) {
                    pobierzZdjecie();
                }
                if (wiersz != -1 && zdjecie != null) {
                    jFileChooserZdjecie.setSelectedFile(new File(zdjecie.getNazwaPliku()));
                    int wynik = jFileChooserZdjecie.showSaveDialog(table);
                    plik = jFileChooserZdjecie.getSelectedFile();
                    if (wynik == JFileChooser.APPROVE_OPTION && plik != null) {
                        new Thread(new ThreadZdjecie()).start();
                    }
                }
            }
        }

        public void pobierzZdjecie() {
            int id = Integer.parseInt(table.getValueAt(wiersz, 0).toString());
            zdjecie = new Zdjecia();

            Session session = medimg.hibernate.HibernateUtil.getSessionFactory().getCurrentSession(); //pobranie obecnej sesji (autostart jesli jej nie ma)
            try {
                session.beginTransaction(); //rozpoczecie transakcji
                if (table.getValueAt(wiersz, 6) == null) {
                    zdjecie = null;
                } else {
                    zdjecie = (Zdjecia) (session.createQuery("from Zdjecia where Badanie = '" + id + "'").uniqueResult());
                }
                session.getTransaction().commit();
            } catch (JDBCException ex) {
                session.getTransaction().rollback(); //jesli sie nie udalo to rollback zeby dane byly zgodne
            }

        }

        public class ThreadZdjecie implements Runnable {

            public void run() {

                jTableGlownaTabela.setEnabled(false);
                jMenuBadania.setEnabled(false);
                jMenuPacjenci.setEnabled(false);
                jMenuPersonel.setEnabled(false);
                jMenuRaporty.setEnabled(false);
                jMenuPomoc.setEnabled(false);
                jMenuPlik.setEnabled(false);
                jMenuKonto.setEnabled(false);
                OutputStream os = null;
                bufor = zdjecie.getZdjecie();
                jProgressBar.setMaximum((int) bufor.length);
                jProgressBar.setStringPainted(true);
                try {
                    os = new FileOutputStream(plik);
                    for (int i = 0; i < bufor.length; i++) {
                        try {
                            os.write(bufor[i]);
                            jProgressBar.setValue(i);
                            jProgressBar.repaint();
                        } catch (IOException ex) {
                            JOptionPane.showConfirmDialog(null, "Blad odczytu pliku!", "Blad", JOptionPane.DEFAULT_OPTION);
                        }
                    }
                } catch (FileNotFoundException ex) {
                    JOptionPane.showConfirmDialog(null, "Nie znaleziono pliku!", "Blad", JOptionPane.DEFAULT_OPTION);
                }
                try {
                    os.close();
                    JOptionPane.showConfirmDialog(null, "Plik zostal pobrany na dysk", "Sukces", JOptionPane.DEFAULT_OPTION);
                } catch (IOException ex) {
                    JOptionPane.showConfirmDialog(null, "Niepowodzenie zamkniecia pliku!", "Blad", JOptionPane.DEFAULT_OPTION);
                }
                jTableGlownaTabela.setEnabled(true);
                jMenuBadania.setEnabled(true);
                jMenuPacjenci.setEnabled(true);
                jMenuPersonel.setEnabled(true);
                jMenuRaporty.setEnabled(true);
                jMenuPomoc.setEnabled(true);
                jMenuPlik.setEnabled(true);
                jMenuKonto.setEnabled(true);
                jProgressBar.setValue(0);
            }
        }
    }
}
